#pragma once
#include <stdio.h>

typedef int ElemType;
#define MaxSize 128

typedef struct _SqStack
{
	ElemType* base;
	ElemType* top;
}SqStack;

bool initStack(SqStack& S)
{
	S.base = new ElemType[MaxSize];
	if (!S.base)return false;
	S.top = S.base;
	return true;
}

bool PushStack(SqStack& S, ElemType e)
{
	if (S.top - S.base == MaxSize)return false;
	*(S.top++) = e;
	return true;
}

bool PopStack(SqStack& S, ElemType& e)
{
	if (S.base == S.top)return false;
	e = *(--S.top);
	return true;
}

ElemType* GetTop(SqStack& S)
{
	if (S.top != S.base)
	{
		return S.top - 1;
	}
	else
	{
		return NULL;
	}
}

int GetSize(SqStack& S)
{
	return (S.top - S.base);
}

bool isEmpty(SqStack& S)
{
	if (S.top == S.base)
	{
		return true;
	}
	else
	{
		return false;
	}
}

void DestoryStack(SqStack& S)
{
	if (S.base)
	{
		delete[]S.base;
		S.base = NULL;
		S.top = NULL;
	}
}